package gui;

import dados.BancoQuestoes;
import gui.modelos.KeyListenerJanela;
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import logica.GerenciaReversao;
import logica.GerenciaSerializacao;
import logica.GerenciaCorrecao;
import logica.TestaConfiguracao;
import dados.PastaCorrecao; 
import dados.Preferencias;
import java.awt.Toolkit;

/**
 *
 * @author  UltraXP
 */
public class Principal extends javax.swing.JFrame {

	private static final long serialVersionUID = 1L;

	private static Principal instancia = null;
    
    private static int OPCAO_ENT = 0;
    private static int OPCAO_REV = 1;
    private static int OPCAO_COR = 2;
    private static int OPCAO_NOT = 3;
    private static int OPCAO_COP = 4;
    private static int OPCAO_SAL = 5;
    private static int OPCAO_FEC = 6;
    private static int OPCAO_GQUE = 7;
    private static int OPCAO_GBAN = 8;
    
    /** Creates new form Principal */
    public Principal() {
    	System.out.println("Janela Principal - gui.Principal");
        initComponents();
        inicializarJFileChooser();
        inicializarJOptionPane();
        configurarIcones();
        Janelas.alinharContainer(this);
        limparContentPane();
        desabilitarOpcoes(new int[] { 0, 1, 2, 3, 4, 5, 6});
        habilitarOpcoes(new int[] {0,7,8});
        this.addKeyListener(new KeyListenerJanela());
        instancia = this;
    }
    
    private void configurarIcones() {
        this.setIconImage(Toolkit.getDefaultToolkit().
                getImage(getClass().getResource("/imagens/corretor.png")));
    }
    
    public static Principal getInstancia() {
        return instancia;
    }

    private void inicializarJFileChooser() {
        UIManager.put("FileChooser.acceptAllFileFilterText", "Todos os arquivos");
        
        UIManager.put("FileChooser.openButtonToolTipText", "Abrir diretório selecionado");
        UIManager.put("FileChooser.openButtonText", "Abrir");
        UIManager.put("FileChooser.cancelButtonToolTipText", "Cancelar diálogo");
        UIManager.put("FileChooser.cancelButtonText", "Cancelar");
        
        UIManager.put("FileChooser.lookInLabelText", "Examinar:");
        UIManager.put("FileChooser.fileNameLabelText", "Nome do arquivo:");
        UIManager.put("FileChooser.filesOfTypeLabelText", "Arquivos do tipo:");
        
        UIManager.put("FileChooser.detailsViewButtonToolTipText", "Detalhes");
        UIManager.put("FileChooser.listViewButtonToolTipText", "Lista");
        UIManager.put("FileChooser.upFolderToolTipText", "Um nível acima");
        UIManager.put("FileChooser.newFolderToolTipText", "Criar nova pasta");
    }
    
    private void inicializarJOptionPane() {
        UIManager.put("OptionPane.yesButtonText", "Sim");
        UIManager.put("OptionPane.noButtonText", "Não");
        UIManager.put("OptionPane.cancelButtonText", "Cancelar");
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        barraMenu = new javax.swing.JMenuBar();
        menuElaborar = new javax.swing.JMenu();
        itemQuestao = new javax.swing.JMenuItem();
        itemBanco = new javax.swing.JMenuItem();
        menuCorrigir = new javax.swing.JMenu();
        itemNova = new javax.swing.JMenuItem();
        itemImportar = new javax.swing.JMenuItem();
        itemEntradas = new javax.swing.JMenuItem();
        itemCorrigir = new javax.swing.JMenuItem();
        itemCorrigir2 = new javax.swing.JMenuItem();
        itemCorrigir3 = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JSeparator();
        itemSalvar = new javax.swing.JMenuItem();
        itemFechar = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JSeparator();
        itemSair = new javax.swing.JMenuItem();
        menuFerramentas = new javax.swing.JMenu();
        itemNotas = new javax.swing.JMenuItem();
        itemCopia = new javax.swing.JMenuItem();
        itemReverter = new javax.swing.JMenuItem();
        menuAjuda = new javax.swing.JMenu();
        itemAjuda = new javax.swing.JMenuItem();
        itemSobre = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Corretor 2.1");

        menuElaborar.setText("Elaborar");

        itemQuestao.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
        itemQuestao.setText("Questão");
        itemQuestao.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemQuestaoActionPerformed(evt);
            }
        });
        menuElaborar.add(itemQuestao);

        itemBanco.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.CTRL_MASK));
        itemBanco.setText("Banco/Prova");
        itemBanco.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemBancoActionPerformed(evt);
            }
        });
        menuElaborar.add(itemBanco);

        barraMenu.add(menuElaborar);

        menuCorrigir.setText("Corrigir");

        itemNova.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
        itemNova.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/novacorrecao.png"))); // NOI18N
        itemNova.setText("Nova Correção");
        itemNova.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemNovaActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemNova);

        itemImportar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
        itemImportar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/impcorrecao.png"))); // NOI18N
        itemImportar.setText("Importar Correção...");
        itemImportar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemImportarActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemImportar);

        itemEntradas.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F2, 0));
        itemEntradas.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/entradas.png"))); // NOI18N
        itemEntradas.setText("Entradas e Gabaritos");
        itemEntradas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemEntradasActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemEntradas);

        itemCorrigir.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
        itemCorrigir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/corrigir.png"))); // NOI18N
        itemCorrigir.setText("Corrigir");
        itemCorrigir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemCorrigirActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemCorrigir);
        menuCorrigir.add(jSeparator1);
        
        itemCorrigir3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0));
        itemCorrigir3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/corrigir.png"))); // NOI18N
        itemCorrigir3.setText("Corrigir com condicionais");
        itemCorrigir3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemCorrigirCondicionaisActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemCorrigir2);
        menuCorrigir.add(jSeparator2);
        
        itemCorrigir2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, 0));
        itemCorrigir2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/corrigir.png"))); // NOI18N
        itemCorrigir2.setText("Corrigir com funções");
        itemCorrigir2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemCorrigirFuncoesActionPerformed(evt);
            }
        });
        
        menuCorrigir.add(itemCorrigir3);
        menuCorrigir.add(jSeparator1);
        
        itemSalvar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        itemSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/salvar.png"))); // NOI18N
        itemSalvar.setText("Salvar");
        itemSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemSalvarActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemSalvar);

        itemFechar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
        itemFechar.setText("Fechar Correção");
        itemFechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemFecharActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemFechar);
        menuCorrigir.add(jSeparator2);

        itemSair.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0));
        itemSair.setText("Sair");
        itemSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemSairActionPerformed(evt);
            }
        });
        menuCorrigir.add(itemSair);

        barraMenu.add(menuCorrigir);

        menuFerramentas.setText("Ferramentas");

        itemNotas.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
        itemNotas.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/notas.png"))); // NOI18N
        itemNotas.setText("Proporção das Notas");
        itemNotas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemNotasActionPerformed(evt);
            }
        });
        menuFerramentas.add(itemNotas);

        itemCopia.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
        itemCopia.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/copia.png"))); // NOI18N
        itemCopia.setText("Cópia de Arquivo");
        itemCopia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemCopiaActionPerformed(evt);
            }
        });
        menuFerramentas.add(itemCopia);

        itemReverter.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.CTRL_MASK));
        itemReverter.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/reverter.png"))); // NOI18N
        itemReverter.setText("Reverter Correção");
        itemReverter.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemReverterActionPerformed(evt);
            }
        });
        menuFerramentas.add(itemReverter);

        barraMenu.add(menuFerramentas);

        menuAjuda.setText("Ajuda");

        itemAjuda.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
        itemAjuda.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/contajuda.png"))); // NOI18N
        itemAjuda.setText("Conteúdos de Ajuda");
        itemAjuda.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemAjudaActionPerformed(evt);
            }
        });
        menuAjuda.add(itemAjuda);

        itemSobre.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/sobre.png"))); // NOI18N
        itemSobre.setText("Sobre");
        itemSobre.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemSobreActionPerformed(evt);
            }
        });
        menuAjuda.add(itemSobre);

        barraMenu.add(menuAjuda);

        setJMenuBar(barraMenu);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 670, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 440, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void itemFecharActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemFecharActionPerformed
        fecharCorrecao();
    }//GEN-LAST:event_itemFecharActionPerformed

    private void itemSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemSalvarActionPerformed
        salvar();
    }//GEN-LAST:event_itemSalvarActionPerformed

    private void itemCopiaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemCopiaActionPerformed
        new CopiaArquivo(this).setVisible(true);
    }//GEN-LAST:event_itemCopiaActionPerformed

    private void itemNotasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemNotasActionPerformed
        new NotasProporcao(this).setVisible(true);
    }//GEN-LAST:event_itemNotasActionPerformed

    private void itemReverterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemReverterActionPerformed
        reverter();
    }//GEN-LAST:event_itemReverterActionPerformed

    private void itemAjudaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemAjudaActionPerformed
        new Ajuda(this).setVisible(true);
    }//GEN-LAST:event_itemAjudaActionPerformed

    private void itemSobreActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemSobreActionPerformed
        new Sobre(this).setVisible(true);
    }//GEN-LAST:event_itemSobreActionPerformed

    private void itemImportarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemImportarActionPerformed
        importarCorrecao();
    }//GEN-LAST:event_itemImportarActionPerformed

    private void itemNovaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemNovaActionPerformed
        novaCorrecao();
    }//GEN-LAST:event_itemNovaActionPerformed

    private void itemSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemSairActionPerformed
        sair();
    }//GEN-LAST:event_itemSairActionPerformed

    private void itemEntradasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemEntradasActionPerformed
        entradas();
    }//GEN-LAST:event_itemEntradasActionPerformed

    private void itemCorrigirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemCorrigirActionPerformed
        corrigir(0);
    }//GEN-LAST:event_itemCorrigirActionPerformed

    private void itemCorrigirCondicionaisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemCorrigirActionPerformed
    	corrigir(2);
    }//GEN-LAST:event_itemCorrigirActionPerformed
    
    private void itemCorrigirFuncoesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemCorrigirActionPerformed
        corrigir(1);
    }//GEN-LAST:event_itemCorrigirActionPerformed
    
    private void itemQuestaoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemQuestaoActionPerformed
        gerarQuestao();
    }//GEN-LAST:event_itemQuestaoActionPerformed

    private void itemBancoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemBancoActionPerformed
        gerarBanco();
    }//GEN-LAST:event_itemBancoActionPerformed
    
    private void novaCorrecao() {
    	if(BancoQuestoes.getInstancia().getArrayListQuestaoProva().isEmpty()){
    		JOptionPane.showMessageDialog(this, "Você deve selecionar um banco primeiro!",
    	                        "Sem Banco.", JOptionPane.ERROR_MESSAGE);
    		return ;
    	}
    	
        UIManager.put("FileChooser.openDialogTitleText", "Nova Correção");
        File diretorio = null;
        
        File dirPadrao = Preferencias.getInstancia().getDiretorioNavegacao();
        JFileChooser fc = new JFileChooser();
        if (dirPadrao != null) {
            fc.setCurrentDirectory(dirPadrao);
        } else {
            Preferencias.getInstancia().setDiretorioNavegacao(new File(System.getProperty("user.dir")));
            dirPadrao = Preferencias.getInstancia().getDiretorioNavegacao();
            fc.setCurrentDirectory(dirPadrao);
        }

        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int resultado = fc.showOpenDialog(this);
        Janelas.alinharContainer(fc);
        
        if (resultado == JFileChooser.CANCEL_OPTION) {
            diretorio = null;
        } else {
            diretorio = fc.getSelectedFile();
            Preferencias.getInstancia().setDiretorioNavegacao(diretorio);
            try {
                TestaConfiguracao tc = new TestaConfiguracao();
                tc.testarConfiguracao(diretorio);
                habilitarOpcoes(new int[] { 0, 1, 2, 3, 5, 6 });
                Bancos.salvar();
                if(BancoQuestoes.getInstancia().getTamanhoBanco() >= 1){
                    //habilitarOpcoes(new int[] { 2, 3, 4 });
                    this.getContentPane().setVisible(false);
                    this.setContentPane(new PastaCorrigida());
                    this.getContentPane().setVisible(true);
                }
                JOptionPane.showMessageDialog(this, "Organização das pastas concluída!", 
                        "Concluído!", JOptionPane.INFORMATION_MESSAGE);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "O diretório informado não " +
            "é válido,\n pois não contém os .c!", 
                        "Diretório Inválido!", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    
    private void importarCorrecao() {
        UIManager.put("FileChooser.openDialogTitleText", "Importar Correção...");
        File diretorio = null;
        
        File dirPadrao = Preferencias.getInstancia().getDiretorioNavegacao();
        JFileChooser fc = new JFileChooser();
        if (dirPadrao != null) {
            fc.setCurrentDirectory(dirPadrao);
        } else {
            Preferencias.getInstancia().setDiretorioNavegacao(new File(System.getProperty("user.dir")));
            dirPadrao = Preferencias.getInstancia().getDiretorioNavegacao();
            fc.setCurrentDirectory(dirPadrao);
        }
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int resultado = fc.showOpenDialog(this);
        Janelas.alinharContainer(fc);
        if (resultado == JFileChooser.CANCEL_OPTION) {
            diretorio = null;
        } else {
            diretorio = fc.getSelectedFile();
            Preferencias.getInstancia().setDiretorioNavegacao(diretorio);
            try {
                GerenciaSerializacao gerSer = new GerenciaSerializacao();
                gerSer.desserializar(diretorio);
                if(BancoQuestoes.getInstancia().getTamanhoBanco() >= 1){
                    habilitarOpcoes(new int[] { 0, 1, 2, 3, 4, 5, 6 });
                    this.getContentPane().setVisible(false);
                    this.setContentPane(new PastaCorrigida());
                    this.getContentPane().setVisible(true);
                } else {
                    habilitarOpcoes(new int[] { 0, 1, 5, 6 });     
                }
                
                JOptionPane.showMessageDialog(this, "Importação Concluída!", "Concluído!",
                    JOptionPane.INFORMATION_MESSAGE);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "O diretório informado não " +
            "é válido,\n pois não foi feita uma correção nele!", 
                        "Diretório Inválido!", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    
    private void salvar() {
        GerenciaSerializacao gerSer = new GerenciaSerializacao();
        gerSer.serializar();
        JOptionPane.showMessageDialog(null, "Alterações salvas com sucesso!", "Alterações Salvas!", JOptionPane.INFORMATION_MESSAGE);
    }
    
    private void fecharCorrecao() {
        if(PastaCorrecao.getModificado()) {
            int opcao = JOptionPane.showConfirmDialog(this, "Existem alterações não " +
                    "salvas, \n gostaria de salvá-las antes de fechar?", "Confirmação!",
                    JOptionPane.YES_NO_CANCEL_OPTION);
            if (opcao == 0) {
                salvar();
                desabilitarOpcoes(new int[] { 0, 1, 2, 3, 4, 5, 6});
            } else if (opcao == 1) {
                PastaCorrecao.setInstancia();
            } else {
                return;
            }
        } else {
            desabilitarOpcoes(new int[] { 0, 1, 2, 3, 4, 5, 6});
            PastaCorrecao.setInstancia();
        }
        limparContentPane();
    }
    
    private void sair() {
        if(PastaCorrecao.getModificado()) {
            int opcao = JOptionPane.showConfirmDialog(this, "Existem alterações não " +
                    "salvas, \n gostaria de salvá-las antes de sair?", "Confirmação!",
                    JOptionPane.YES_NO_CANCEL_OPTION);
            if (opcao == 0) {
                salvar();
            } else if (opcao == 2) {
                return;
            }
        }
        this.dispose();
    }
    
    private void entradas() {
        Bancos banco = null;   
        
        if (!BancoQuestoes.getInstancia().getArrayListQuestaoProva().isEmpty()) {
            banco = new Bancos(this, BancoQuestoes.getInstancia().getArrayListQuestaoProva());
            banco.setVisible(true);
        } else {
            banco = new Bancos(this);
            banco.setVisible(true);
        }
        
        if(BancoQuestoes.getInstancia().getTamanhoBanco() >= 1){
            habilitarOpcoes(new int[] {  4 });
            this.getContentPane().setVisible(false);
            if(PastaCorrecao.getInstancia() == null){
            	System.out.println("gui.Principal.entradas().testedeConsist");
            }
        } else {
            desabilitarOpcoes(new int[] { 2, 3, 4 });
            this.getContentPane().setVisible(false);
            this.setContentPane(new JPanel());
            this.getContentPane().setVisible(true);
        }

    }
    
    private void corrigir(int i) {
        GerenciaCorrecao testaCor = new GerenciaCorrecao();
        limparContentPane();
        testaCor.corrigir(i);
        this.getContentPane().setVisible(false);
        this.setContentPane(new TabelaNotas(this));
        this.getContentPane().setVisible(true);
        JOptionPane.showMessageDialog(this, "Correção Concluída!", "Concluído!",
                JOptionPane.INFORMATION_MESSAGE);
    }
    
    private void reverter() {
        int opcao = JOptionPane.showConfirmDialog(this, "Você tem certeza que deseja " +
                "reverter a correção?", "Confirmação!", JOptionPane.YES_NO_OPTION);
        if (opcao == 0) {
            GerenciaReversao gerRev = new GerenciaReversao();
            gerRev.reverter();
            limparContentPane();
            desabilitarOpcoes(new int[] { 0, 1, 2, 3, 4, 5, 6});
            JOptionPane.showMessageDialog(this, "Reversão Concluída!", "Concluído!",
                    JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void gerarQuestao() {
        JanelaQuestao jan = new JanelaQuestao();
        jan.setVisible(true);
    }
    
    private void gerarBanco(){
        JanelaProva jan = new JanelaProva();
        jan.setVisible(true);
    }
       
    private void desabilitarOpcoes(int[] opcoes) {
        for (int opcao : opcoes) {
            if (opcao == OPCAO_ENT) {
                itemEntradas.setEnabled(false);
            } else if (opcao == OPCAO_REV) {
                itemReverter.setEnabled(false);
            } else if (opcao == OPCAO_COR) {
                itemCorrigir.setEnabled(false);
                itemCorrigir2.setEnabled(false);
                itemCorrigir3.setEnabled(false);
            } else if (opcao == OPCAO_NOT) {
                itemNotas.setEnabled(false);
            } else if (opcao == OPCAO_COP) {
                itemCopia.setEnabled(false);
            } else if (opcao == OPCAO_SAL) {
                itemSalvar.setEnabled(false);
            } else if (opcao == OPCAO_FEC) {
                itemFechar.setEnabled(false);
            } else if (opcao == OPCAO_GQUE) {
                itemQuestao.setEnabled(false);
            } else if (opcao == OPCAO_GBAN) {
                itemBanco.setEnabled(false);
            }
        }
    }
    
    private void habilitarOpcoes(int[] opcoes) {
        for (int opcao : opcoes) {
            if (opcao == OPCAO_ENT) {
                itemEntradas.setEnabled(true);
            } else if (opcao == OPCAO_REV) {
                itemReverter.setEnabled(true);
            } else if (opcao == OPCAO_COR) {
                itemCorrigir.setEnabled(true);
                itemCorrigir2.setEnabled(true);
                itemCorrigir3.setEnabled(true);
            } else if (opcao == OPCAO_NOT) {
                itemNotas.setEnabled(true);
            } else if (opcao == OPCAO_COP) {
                itemCopia.setEnabled(true);
            } else if (opcao == OPCAO_SAL) {
                itemSalvar.setEnabled(true);
            } else if (opcao == OPCAO_FEC) {
                itemFechar.setEnabled(true);
            } else if (opcao == OPCAO_GQUE) {
                itemQuestao.setEnabled(true);
            } else if (opcao == OPCAO_GBAN) {
                itemBanco.setEnabled(true);
            }
        }
    }
    
    private void limparContentPane() {
        this.getContentPane().setVisible(false);
        this.setContentPane(new JPanel());
        this.getContentPane().setVisible(true);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Principal().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuBar barraMenu;
    private javax.swing.JMenuItem itemAjuda;
    private javax.swing.JMenuItem itemBanco;
    private javax.swing.JMenuItem itemCopia;
    private javax.swing.JMenuItem itemCorrigir;
    private javax.swing.JMenuItem itemCorrigir2;
    private javax.swing.JMenuItem itemCorrigir3;
    private javax.swing.JMenuItem itemEntradas;
    private javax.swing.JMenuItem itemFechar;
    private javax.swing.JMenuItem itemImportar;
    private javax.swing.JMenuItem itemNotas;
    private javax.swing.JMenuItem itemNova;
    private javax.swing.JMenuItem itemQuestao;
    private javax.swing.JMenuItem itemReverter;
    private javax.swing.JMenuItem itemSair;
    private javax.swing.JMenuItem itemSalvar;
    private javax.swing.JMenuItem itemSobre;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JMenu menuAjuda;
    private javax.swing.JMenu menuCorrigir;
    private javax.swing.JMenu menuElaborar;
    private javax.swing.JMenu menuFerramentas;
    // End of variables declaration//GEN-END:variables
    
}
